package com.yyw.news.controller;

import com.yyw.news.constants.LoginRegisterConstants;
import com.yyw.news.result.Result;
import com.yyw.news.utils.IPUtil;
import com.yyw.news.utils.PhoneFormatCheckUtils;
import com.yyw.news.utils.RedisOperator;
import com.yyw.news.utils.SMSUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

/**
 * @author 易煜玮
 * @ClassName LoginController.java
 * @Description 登录&注册服务
 * @createTime 2021年04月27日 21:09:00
 */
@RestController
@RequestMapping("/passport")
public class LoginController {

    @Autowired
    SMSUtils smsUtils;

    @Autowired
    RedisOperator redisOperator;

    /**
     * 发送短信验证码
     * @param mobile
     * @return
     */
    @GetMapping("/getSMSCode")
    public Result sendCode(String mobile, HttpServletRequest request) {
        if (!StringUtils.isEmpty(mobile) && PhoneFormatCheckUtils.isChinaPhoneLegal(mobile)) {
            // 获取当前用户IP，用来校验60秒只能发一次
            String ip = IPUtil.getRequestIp(request);
            // 查询当前IP在缓存中是否存在
            boolean isExist = redisOperator.keyIsExist(LoginRegisterConstants.REDIS_SMS_IP + ip);
            if (!isExist) {
                // 生成code
                String code = (int) (Math.random() * 9000 + 1000) + "";
                // 发送短信
                smsUtils.sendSms(mobile, code);
                // 设置code 10分钟过期
                redisOperator.set(LoginRegisterConstants.REDIS_SMS_PHONE + mobile, code, 60 * 10);
                // 设置IP 缓存60秒过期
                redisOperator.set(LoginRegisterConstants.REDIS_SMS_IP + ip, ip, 60);
                return Result.ok();
            }
            return Result.errorMsg("发送短信频率太快了，请稍等...");
        }
        return Result.errorMsg("请输入正确的手机号码!");
    }
}
